package io;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import midi.Nota;
import midi.Notas;

public class Writer {

	protected PrintWriter arquivo = null;
	protected ArrayList<Notas> notas;
	protected ArrayList<Integer> instrumentos;
	protected String lineBreaker = null;
	protected int atual = 0; // Contador de faixas;

	public Writer(String path, String nomeDoArquivo,
			ArrayList<Notas> notas, ArrayList<Integer> instrumentos) {
		this.instrumentos = instrumentos;
		lineBreaker = System.getProperty("line.separator");

		if (nomeDoArquivo == null)
			nomeDoArquivo = "";
		if (path == null)
			path = "";

		setNotas(notas);

		try {
			setArquivo(new PrintWriter(new FileWriter(path + nomeDoArquivo)));
		} catch (IOException e) {
			System.out.println("Writer - Writer()");
			e.printStackTrace();
		}
		salvar();
	}

	private void salvar() {
		for (Notas notas : getNotas()) {
			// Caractere que indica início de nova faixa:
			arquivo.write("@");
			arquivo.write(lineBreaker);
			arquivo.write(String.valueOf(instrumentos.get(atual)));
			arquivo.write(lineBreaker);

			for (Nota nota : notas.getArray()) {
				arquivo.write("#"); // Indica nova nota
				arquivo.write(lineBreaker);
				arquivo.write(String.valueOf(nota.getNota()));
				arquivo.write(lineBreaker);
				arquivo.write(String.valueOf(nota.getDuracao()));
				arquivo.write(lineBreaker);
				arquivo.write(String.valueOf(nota.getIntensidade()));
				arquivo.write(lineBreaker);
			}
			arquivo.write("$");
			arquivo.write(lineBreaker);
			atual++;
		}
		fechaArquivo();
	}

	private void fechaArquivo() {
		arquivo.close();
	}

	protected void setArquivo(PrintWriter arquivo) {
		this.arquivo = arquivo;
	}

	protected ArrayList<Notas> getNotas() {
		return notas;
	}

	protected void setNotas(ArrayList<Notas> notas) {
		this.notas = notas;
	}
}
